package day01

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 目前未准备windows环境，需将程序打包到linux环境运行
 */
object WordCount {
  def main(args: Array[String]): Unit = {
    // 1、创建SparkConf对象，并设置App名字
    // local：线程数 = 1
    // local[k]：线程数 = k
    // local[*]：线程数 = CPU核数
    val sparkConf: SparkConf = new SparkConf().setAppName("wordCount").setMaster("local[*]")

    // 2、创建SparkContext对象
    val sc: SparkContext = new SparkContext(sparkConf)

    // sc.textFile(args(0)).flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).saveAsTextFile(args(1))
    // 3、读取外部文件
    val textRDD: RDD[String] = sc.textFile("input")

    // 4、对读取到的内容进行切割并进行扁平化操作
    val flatMapRDD: RDD[String] = textRDD.flatMap(_.split(" "))

    // 5、对数据集里面的内容进行结构的转换
    val mapRDD: RDD[(String, Int)] = flatMapRDD.map((_, 1))

    // 6、对相同的单词 出现的次数进行汇总
    val reduceRDD: RDD[(String, Int)] = mapRDD.reduceByKey(_ + _)


    // 7、将执行的结构进行收集
    reduceRDD.saveAsTextFile("output")

    //4、关闭连接
    sc.stop()
  }
}
